/**
* @author Lourdes Sanchez
* @author Eugenia Jose
* @author Esteban Castro
* @author Carlos Fernandez
* @author Fernando Turon
* @version 1.0 01-05-12*
 * 

/*
 * PantallaEstudianteInscripcion.java
 *
 * Created on 30-abr-2012, 23:56:21
 */

package edu.uoc.tds.pec4.swingx;

import edu.uoc.tds.pec4.common.RemotoInterface;
import edu.uoc.tds.pec4.exception.ListaVaciaException;
import edu.uoc.tds.pec4.exception.RegistroNoSeleccionado;
import edu.uoc.tds.pec4.i18n.GestorIdiomas;
import edu.uoc.tds.pec4.model.Estudiante;
import edu.uoc.tds.pec4.model.Prueba;
import edu.uoc.tds.pec4.model.TipoEstado;
import edu.uoc.tds.pec4.model.Usuario;
import java.rmi.RemoteException;
import java.rmi.Naming;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JDialog;
import javax.swing.JOptionPane;

/**
 *
 * @author Esteban
 */
public class PantallaEstudianteInscripcion extends javax.swing.JDialog {
    private PantallaMenuPrincipal pantallaMenuPrincipal;
    private RemotoInterface remoto;

    private boolean aRefrescar;
    private Estudiante estudiante;
    private List<Prueba> pruebasDisponibles;
   

    /** Creates new form PantallaPruebas */
    public PantallaEstudianteInscripcion(PantallaMenuPrincipal pantallaMenuPrincipal, boolean modal) throws RemoteException
    {
        this.pantallaMenuPrincipal = pantallaMenuPrincipal;
        this.estudiante = (Estudiante)pantallaMenuPrincipal.getUsuario();
        this.remoto = pantallaMenuPrincipal.getRemoto();
        this.aRefrescar = false;

        initComponents();
        CargaIdioma();
        myInitComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jToolBarraHerramientas = new javax.swing.JToolBar();
        jSeparator4 = new javax.swing.JToolBar.Separator();
        btnExit = new javax.swing.JButton();
        jPanelPruebas = new javax.swing.JPanel();
        jbtnVerPrueba = new javax.swing.JButton();
        jlTituloPpal = new javax.swing.JLabel();
        jScrollPanePruebas = new javax.swing.JScrollPane();
        jtablePruebas = new javax.swing.JTable();
        jmnuBarPruebas = new javax.swing.JMenuBar();
        jmnuArchivo = new javax.swing.JMenu();
        jmnuSalir = new javax.swing.JMenuItem();
        jmnuAyuda = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("eOlympics - Inscripcion");
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowActivated(java.awt.event.WindowEvent evt) {
                formWindowActivated(evt);
            }
        });

        jToolBarraHerramientas.setRollover(true);
        jToolBarraHerramientas.add(jSeparator4);

        btnExit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/Exit.png"))); // NOI18N
        btnExit.setToolTipText("Salir");
        btnExit.setFocusable(false);
        btnExit.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnExit.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnExit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExitsalir(evt);
            }
        });
        jToolBarraHerramientas.add(btnExit);

        javax.swing.GroupLayout jPanelPruebasLayout = new javax.swing.GroupLayout(jPanelPruebas);
        jPanelPruebas.setLayout(jPanelPruebasLayout);
        jPanelPruebasLayout.setHorizontalGroup(
            jPanelPruebasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 0, Short.MAX_VALUE)
        );
        jPanelPruebasLayout.setVerticalGroup(
            jPanelPruebasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 275, Short.MAX_VALUE)
        );

        jbtnVerPrueba.setText("Ver prueba");
        jbtnVerPrueba.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbtnVerPruebaActionPerformed(evt);
            }
        });

        jlTituloPpal.setFont(new java.awt.Font("Tahoma", 1, 14));
        jlTituloPpal.setForeground(new java.awt.Color(102, 102, 255));
        jlTituloPpal.setText("Listado de pruebas disponibles para la inscripción");

        jtablePruebas.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "id_prueba", "Prueba", "Tipo Ronda", "Plazas totales", "Plazas libres", "Fecha límite inscripción", "Inscrito"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.String.class, java.lang.String.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.String.class, java.lang.Boolean.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPanePruebas.setViewportView(jtablePruebas);

        jmnuArchivo.setText("Archivo");
        jmnuArchivo.setFont(new java.awt.Font("Tahoma", 1, 11));

        jmnuSalir.setText("Salir");
        jmnuArchivo.add(jmnuSalir);

        jmnuBarPruebas.add(jmnuArchivo);

        jmnuAyuda.setText("Ayuda");
        jmnuAyuda.setFont(new java.awt.Font("Tahoma", 1, 11));
        jmnuBarPruebas.add(jmnuAyuda);

        setJMenuBar(jmnuBarPruebas);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jToolBarraHerramientas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jPanelPruebas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jbtnVerPrueba)
                            .addComponent(jScrollPanePruebas, javax.swing.GroupLayout.PREFERRED_SIZE, 652, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jlTituloPpal, javax.swing.GroupLayout.PREFERRED_SIZE, 474, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jToolBarraHerramientas, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jlTituloPpal)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(44, 44, 44)
                        .addComponent(jPanelPruebas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPanePruebas, javax.swing.GroupLayout.PREFERRED_SIZE, 285, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jbtnVerPrueba)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnExitsalir(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExitsalir
        // TODO add your handling code here:
        this.setVisible(false);
}//GEN-LAST:event_btnExitsalir

    private void jbtnVerPruebaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbtnVerPruebaActionPerformed
        this.VerPrueba();
        this.aRefrescar = true;
}//GEN-LAST:event_jbtnVerPruebaActionPerformed

    private void formWindowActivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowActivated
        // TODO add your handling code here:
        // Se refresca la pantalla al volver de pantallaEstudianteInfoPrueba
        if(this.aRefrescar)
        {
            myInitComponents();
            this.aRefrescar = false;
        }
    }//GEN-LAST:event_formWindowActivated

    /**
    * @param args the command line arguments
    */
    public static void main(String args[])
    {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {

                GestorIdiomas.setDefaultLanguage("i18n/messages");

                PantallaEstudianteInscripcion dialog = null;
                try {
                    PantallaMenuPrincipal ppal = cargaPpal();
                    dialog = new PantallaEstudianteInscripcion(ppal, true);
                }

                catch (RemoteException ex) {
                    Logger.getLogger(PantallaEstudianteInscripcion.class.getName()).log(Level.SEVERE, null, ex);
                }

                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    public static PantallaMenuPrincipal cargaPpal()
    {
         PantallaMenuPrincipal pantallaMenuPrincipal = null;
         try {

            RemotoInterface remoto = (RemotoInterface) Naming.lookup("rmi://localhost/eOlympics");

            //JOptionPane.showMessageDialog(null, "Conectado RMI");

            remoto.conectaBBDD();
            
            Usuario usuario = remoto.validarUsuario("JPG", "1234");

            pantallaMenuPrincipal = new PantallaMenuPrincipal(usuario,remoto);

            //pantallaMenuPrincipal.setVisible(true);

        }

        catch (Exception exc)
        {
            //System.out.print(exc.getMessage());
            //exc.printStackTrace();
            JOptionPane.showMessageDialog(null,"cargaPPal(): " + exc.getMessage());
          //  Dialog.
        }

        return pantallaMenuPrincipal;
    }

    private void CargaIdioma()
    {
        //Llamando al gestor de idiomas para los menus y etiquetas de controles
        this.jmnuArchivo.setText(GestorIdiomas.getMessage("menu.archivo.text"));
        this.jmnuSalir.setText(GestorIdiomas.getMessage("menu.salir.text"));
        this.jmnuAyuda.setText(GestorIdiomas.getMessage("menu.ayuda.text"));

        this.jlTituloPpal.setText(GestorIdiomas.getMessage("PantallaEstudianteInscripcion.jlTituloPpal"));
        this.jbtnVerPrueba.setText(GestorIdiomas.getMessage("PantallaEstudianteInscripcion.jbtnVerPrueba"));
        this.setTitle(GestorIdiomas.getMessage("PantallaEstudianteInscripcion.Titulo"));
    }

    private void myInitComponents()
    {
        try {
            //int numeroFilas = 0;
            this.pruebasDisponibles = this.remoto.getListaPruebasPorEstado(TipoEstado.INSCRIPCION);
            if(this.pruebasDisponibles.size() < 1)
                throw new ListaVaciaException();
            
            this.limpiarTablaPruebas();
        }

        catch (ListaVaciaException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }

        catch (RemoteException exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }

        catch (Exception exc) {
            exc.printStackTrace();
            JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }    }

    /**
     * MÃ©todo para rellenar los resultados de la participaciÃ³n en un jtable sin diferenciar por universidad
     * {pre: la clase ha de estar instanciada previamente y el objeto definido}
     * {post: establece contenidos, la valoraciÃ³n, de las celdas, informando del nÃºmero de respuestas por cada tipo de pregunta/respuesta}
     */
    public void limpiarTablaPruebas()
    {
        int numeroFilas = this.pruebasDisponibles.size();
        //System.out.println("PantInscripcion.limpiarTablaPruebas(). Filas: " + numeroFilas);
        try
        {
            Object datos[][] = new Object[numeroFilas][7];

            int numeroFila = 0;
            for(Prueba prueba: this.pruebasDisponibles)
            {
                int id_prueba;
                String descripcion_prueba;
                String tipo_Ronda;
                int numero_plazas;
                int numero_plazas_libres;
                String fecha_limite;
                boolean inscrito;

                id_prueba = (Integer) prueba.getId_prueba();
                descripcion_prueba = (String) prueba.getDescripcion_prueba();
                numero_plazas = prueba.getNumero_plazas();
                tipo_Ronda = (numero_plazas > 10) ? 
                    GestorIdiomas.getMessage("PantallaEstudianteInscripcion.TipoClasificatoria") :
                    GestorIdiomas.getMessage("PantallaEstudianteInscripcion.TipoFinal");
                numero_plazas_libres = numero_plazas - this.remoto.getNumeroInscritos(id_prueba);
                fecha_limite = this.pantallaMenuPrincipal.getFormatoFecha(prueba.getFecha_fin_inscripcion());
                inscrito = this.remoto.estaInscritoEnPrueba(estudiante, prueba);
                
                datos[numeroFila][0] = id_prueba;
                datos[numeroFila][1] = descripcion_prueba;
                datos[numeroFila][2] = tipo_Ronda;
                datos[numeroFila][3] = numero_plazas;
                datos[numeroFila][4] = numero_plazas_libres;
                datos[numeroFila][5] = fecha_limite;
                datos[numeroFila++][6] = inscrito;
            }

            this.jtablePruebas.setModel(new javax.swing.table.DefaultTableModel(
                datos,
            new String [] {
                GestorIdiomas.getMessage("PantallaEstudianteInscripcion.CampoListado1"),
                GestorIdiomas.getMessage("PantallaEstudianteInscripcion.CampoListado2"),
                GestorIdiomas.getMessage("PantallaEstudianteInscripcion.CampoListado3"),
                GestorIdiomas.getMessage("PantallaEstudianteInscripcion.CampoListado4"),
                GestorIdiomas.getMessage("PantallaEstudianteInscripcion.CampoListado5"),
                GestorIdiomas.getMessage("PantallaEstudianteInscripcion.CampoListado6"),
                GestorIdiomas.getMessage("PantallaEstudianteInscripcion.CampoListado7")
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.String.class, java.lang.String.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.String.class, java.lang.Boolean.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false, false
            };


            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
     }

        catch(Exception exc){
            //JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
            JOptionPane.showMessageDialog(null, "limpiaTabla: "+exc.getMessage());
        }
    }

    private void VerPrueba()
    {
        try
        {
            int filaSel = this.jtablePruebas.getSelectedRow();
            if(filaSel > -1)
            {
                String valor = jtablePruebas.getValueAt(filaSel, 0).toString();
                Prueba prueba = this.remoto.getPrueba(Integer.parseInt(valor));

                PantallaEstudianteInfoPrueba dialog =
                        new PantallaEstudianteInfoPrueba(this.pantallaMenuPrincipal, prueba, false);

                dialog.setVisible(true);
            }
            else
                throw new RegistroNoSeleccionado();
        }
        catch(RemoteException exRemote)
        {
            JOptionPane.showMessageDialog(null, exRemote.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }
        catch(RegistroNoSeleccionado exNoSel)
        {
            JOptionPane.showMessageDialog(null, exNoSel.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }
        catch(Exception exc)
        {
            JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnExit;
    private javax.swing.JPanel jPanelPruebas;
    private javax.swing.JScrollPane jScrollPanePruebas;
    private javax.swing.JToolBar.Separator jSeparator4;
    private javax.swing.JToolBar jToolBarraHerramientas;
    private javax.swing.JButton jbtnVerPrueba;
    private javax.swing.JLabel jlTituloPpal;
    private javax.swing.JMenu jmnuArchivo;
    private javax.swing.JMenu jmnuAyuda;
    private javax.swing.JMenuBar jmnuBarPruebas;
    private javax.swing.JMenuItem jmnuSalir;
    private javax.swing.JTable jtablePruebas;
    // End of variables declaration//GEN-END:variables

}
